"""
Python里已经有许多默认的内置模块
不过有时我们需要一些个性化的模块这里就可以通过自定义模块来实现 也就是自己制作一个模块
"""


# 这里自己制作了一个模块儿然后调用它
import 自己定义的模块

自己定义的模块.相加(12, 44)  # 调用自己制作的模块里的一个叫 相加 的函数

print("-----------1----------")
from 自己定义的模块 import 相加  # 和内置模块一样,也可以单独调用一个功能

相加(55, 77.44)


print("-----------2----------")
"""
特别注意 
当导入多个模块时,模块内有同名功能 
当调用这个同名功能的时候,调用到的是后面导入的模块的功能  前面的会被覆后面的覆盖掉 
"""
# 提前定义了2个模块模块一和模块二,里面都有一个叫 运算 的函数功能名相同
from 模块1 import 运算  # 这里的运算是2个数相加
from 模块2 import 运算  # 这里的运算是2个数相减

# 由于2个模块 功能名相同 最终运行的是后面的功能名
运算(2, 5)
print("所以特别注意功模块里能名相同的情况!")

print("-----------2----------")
"""
模块测试 
当编写完一个模块后,为了让模块能够在项目中达到想要的效果 
开发人员会在文件中添加一些测试信息,例如添加测试代码 

但是有一个问题测试代码是用来测试的,别的程序调用这个模块,测试代码也会被执行
if __name__ == '__main__':
    测试代码

这样模板里的测试代码,就不会被别的程序调用的时候执行了
"""

"""
如果模块里有 __all__ = 变量,
当使用 from 自己定义的模块 import *  导入时
只能导入这个列表里的元素

注意这个只能对 * 模式有用
"""
print("-----------3----------")

from 自己定义的模块 import *    # 使用模板的全部功能
相加(28, 59)
# 运算(83, 97)    # 由于模块里有 __all__ ,没有添加 运算 这个值,所以这里 运算 不能用
